<template>
  <div>
    <!-- UploadExcel提供了一个属性，他的值是一个函数，能够
    通过这个函数的参数接受到 删除更换EXCEL表格的数据 -->
    <UploadExcel :on-success="successFn" />
  </div>
</template>

<script>
import { importBatch } from '../../api/employee'
export default {
  methods: {
    async    successFn(data) {
      // data就是表格的数据
      console.log('data13: ', data)
      // 把导入的数据 通过接口传递给后端
      // 后端规定传递的数据格式如下：
      /**
       * [
       *  { username: '小明',mobilde: 13234345456, workNumber: 123, .... },
       *  { username: '小方',mobilde: 13236345456, workNumber: 123, .... }
       * ]
       *
       * 问题：目前我们得到的Excel表格数据 格式是正确的，但是字段名都是中文
       * 因此接下来我们应该要把数据中的字段名中文该为对应的英文，改完后就可以
       * 通过接口传递给后端实现导入功能了。
       * */
      const result = data.results.map(item => {
        return this.zhToEn(item)
      })
      console.log('改造后的数据', result)
      //   调用数据导入的接口，参数选择上面转换好的
      await importBatch(result)
      this.$router.back()
    },
    zhToEn(item) {
      console.log('33item: ', item)
      const obj = {}
      //   为了方便数据转换，定义一个中英文的对照表
      const user = {
        '入职日期': 'timeOfEntry',
        '姓名': 'username',
        '工号': 'workNumber',
        '手机号': 'mobile',
        '转正日期': 'correctionTime'
      }
      for (const key in item) {
        // userValue就是中文字段名对应的英文字段名
        // user[key]拿到的是user对象对面的对应属性名的值，key是属性名，因为key是变量
        // 所以不能引用常规的user.key，而变成了user[key]这样的形式来获取属性值
        // item就是传进来的数组，获取到里面具体的值
        const userValue = user[key]
        console.log(45, key, userValue, item[key])
        // 向空的数组obj添加userValue这个属性，并将item[key]赋值给这个属性
        if (userValue === 'timeOfEntry' || userValue === 'correctionTime') {
          obj[userValue] = this.formatExcelDate(item[key])
        } else {
          obj[userValue] = item[key]
        }
      }
      return obj
    }, /**
 * 格式化Excel表中存储的年月日日期
 * @param {number} num - excel存储的数字
 * @param {string} [format = '-'] - 年月日的间隔符，默认为'-'
 * @returns {string} 格式化后的日期
 */
    formatExcelDate(num, format = '-') {
      if (!/^\d+$/.test(num)) return
      num = parseInt(num)
      let millisecond = 0 // 转化后的毫秒数
      if (num > 60) { // 对大于60的日期进行减1处理
        millisecond = (num - 25568 - 1) * 3600 * 24 * 1000
      } else {
        millisecond = (num - 25568) * 3600 * 24 * 1000
      }
      const date = new Date(millisecond) // 根据转化后的毫秒数获取对应的时间
      const yy = date.getFullYear()
      const m = date.getMonth() + 1
      const mm = m >= 10 ? m : '0' + m
      const d = date.getDate()
      const dd = d >= 10 ? d : '0' + d
      return yy + format + mm + format + dd // 返回格式化后的日期
    }
  }
}
</script>

<style>
</style>
